home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / python-support / python-rdflib / rdflib / URIRef.py < prev    next >
Encoding:
Python Source  |  2007-04-04  |  2.3 KB  |  94 lines

  1. from sys import version_info
  2.  
  3. try:
  4.     from hashlib import md5
  5. except ImportError:
  6.     from md5 import md5    
  7.  
  8. if version_info[0:2] > (2, 2):
  9.     from unicodedata import normalize
  10. else:
  11.     normalize = None
  12.  
  13. from urlparse import urlparse, urljoin, urldefrag
  14.  
  15. from rdflib.Identifier import Identifier
  16. from rdflib.compat import rsplit
  17.  
  18.  
  19. class URIRef(Identifier):
  20.     """
  21.     RDF URI Reference: http://www.w3.org/TR/rdf-concepts/#section-Graph-URIref
  22.     """
  23.  
  24.     __slots__ = ()
  25.  
  26.     def __new__(cls, value, base=None):
  27.         if base is not None:
  28.             ends_in_hash = value.endswith("#")
  29.             value = urljoin(base, value, allow_fragments=1)
  30.             if ends_in_hash:
  31.                 if not value.endswith("#"):
  32.                     value += "#"
  33.         #if normalize and value and value != normalize("NFC", value):
  34.         #    raise Error("value must be in NFC normalized form.")
  35.         try:
  36.             rt = unicode.__new__(cls,value)
  37.         except UnicodeDecodeError:
  38.             rt = unicode.__new__(cls,value,'utf-8')
  39.         return rt
  40.  
  41.     def n3(self):
  42.         return "<%s>" % self
  43.  
  44.     def concrete(self):
  45.         if "#" in self:
  46.             return URIRef("/".join(rsplit(self, "#", 1)))
  47.         else:
  48.             return self
  49.  
  50.     def abstract(self):
  51.         if "#" not in self:
  52.             scheme, netloc, path, params, query, fragment = urlparse(self)
  53.             if path:
  54.                 return URIRef("#".join(rsplit(self, "/", 1)))
  55.             else:
  56.                 if not self.endswith("#"):
  57.                     return URIRef("%s#" % self)
  58.                 else:
  59.                     return self
  60.         else:
  61.             return self
  62.  
  63.  
  64.     def defrag(self):
  65.         if "#" in self:
  66.             url, frag = urldefrag(self)
  67.             return URIRef(url)
  68.         else:
  69.             return self
  70.  
  71.     def __reduce__(self):
  72.         return (URIRef, (unicode(self),))
  73.  
  74.     def __getnewargs__(self):
  75.         return (unicode(self), )
  76.  
  77.  
  78.     def __eq__(self, other):
  79.         if isinstance(other, URIRef):
  80.             return unicode(self)==unicode(other)
  81.         else:
  82.             return False
  83.  
  84.     def __str__(self):
  85.         return self.encode("unicode-escape")
  86.  
  87.     def __repr__(self):
  88.         return """rdflib.URIRef('%s')""" % str(self)
  89.  
  90.     def md5_term_hash(self):
  91.         d = md5(str(self))
  92.         d.update("U")
  93.         return d.hexdigest()
  94.